package com.huawei.zyb.taskManager.domain.requirement.repository;

import com.huawei.zyb.taskManager.domain.requirement.entity.Requirement;
import com.huawei.zyb.taskManager.domain.requirement.valueobject.*;

import java.util.List;
import java.util.Optional;

/**
 * 需求仓储接口
 * 定义需求聚合的持久化契约
 */
public interface RequirementRepository {
    
    /**
     * 保存需求
     */
    Requirement save(Requirement requirement);
    
    /**
     * 根据ID查找需求
     */
    Optional<Requirement> findById(RequirementId requirementId);
    
    /**
     * 根据项目ID查找需求列表
     */
    List<Requirement> findByProjectId(Long projectId);
    
    /**
     * 根据负责人ID查找需求列表
     */
    List<Requirement> findByOwnerId(String ownerId);
    
    /**
     * 根据状态查找需求列表
     */
    List<Requirement> findByStatus(RequirementStatus status);
    
    /**
     * 根据优先级查找需求列表
     */
    List<Requirement> findByPriority(RequirementPriority priority);
    
    /**
     * 查找所有需求
     */
    List<Requirement> findAll();
    
    /**
     * 根据ID删除需求
     */
    void deleteById(RequirementId requirementId);
    
    /**
     * 检查需求是否存在
     */
    boolean existsById(RequirementId requirementId);
    
    /**
     * 检查需求下是否还有未完成的任务
     */
    boolean hasIncompleteTasks(RequirementId requirementId);
    
    /**
     * 根据项目ID和状态查找需求
     */
    List<Requirement> findByProjectIdAndStatus(Long projectId, RequirementStatus status);
}